<!DOCTYPE html>

































































<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="shortcut icon" type="image/x-icon" href="../../../favicon.ico" />
<title>Hardware Acceleration | Android Developers</title>
<link href="../../../assets/android-developer-docs-devguide.css" rel="stylesheet" type="text/css" />
<script src="../../../assets/search_autocomplete.js" type="text/javascript"></script>
<script src="../../../assets/jquery-resizable.min.js" type="text/javascript"></script>
<script src="../../../assets/android-developer-docs.js" type="text/javascript"></script>
<script src="../../../assets/prettify.js" type="text/javascript"></script>
<script type="text/javascript">
  setToRoot("../../../");
</script>
<noscript>
  <style type="text/css">
    html,body{overflow:auto;}
    #body-content{position:relative; top:0;}
    #doc-content{overflow:visible;border-left:3px solid #666;}
    #side-nav{padding:0;}
    #side-nav .toggle-list ul {display:block;}
    #resize-packages-nav{border-bottom:3px solid #666;}
  </style>
</noscript>
</head>
<body class="gc-documentation">

  <div id="header">
      <div id="headerLeft">
          <a href="../../../index.html" tabindex="-1"><img
              src="../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
          <ul id="header-tabs" class="guide">
    
	<li id="home-link"><a href="../../../offline.html">
	
		<span class="en">Home</span>
		<span style="display:none" class="de">Startseite</span>
		<span style="display:none" class="es"></span>
		<span style="display:none" class="fr"></span>
		<span style="display:none" class="it"></span>
		<span style="display:none" class="ja">ホーム</span>
		<span style="display:none" class="zh-CN">主页</span>
		<span style="display:none" class="zh-TW">首頁</span>
	
	</a></li>
	<li id="sdk-link"><a href="../../../sdk/index.html">
		<span class="en">SDK</span>
	</a></li>
	<li id="guide-link"><a href="../../../guide/index.html" onClick="return loadLast('guide')">
	
		<span class="en">Dev Guide</span>
		<span style="display:none" class="de">Handbuch</span>
		<span style="display:none" class="es">Guía</span>
		<span style="display:none" class="fr">Guide</span>
		<span style="display:none" class="it">Guida</span>
		<span style="display:none" class="ja">開発ガイド</span>
		<span style="display:none" class="zh-CN">开发人员指南</span>
		<span style="display:none" class="zh-TW">開發指南</span>
	
	</a></li>
	<li id="reference-link"><a href="../../../reference/packages.html" onClick="return loadLast('reference')">
	
		<span class="en">Reference</span>
		<span style="display:none" class="de">Referenz</span>
		<span style="display:none" class="es">Referencia</span>
		<span style="display:none" class="fr">Référence</span>
		<span style="display:none" class="it">Riferimento</span>
		<span style="display:none" class="ja">リファレンス</span>
		<span style="display:none" class="zh-CN">参考</span>
		<span style="display:none" class="zh-TW">參考資料</span>
	
	</a></li>
	<li id="resources-link"><a href="../../../resources/index.html" onClick="return loadLast('resources')">
	
		<span class="en">Resources</span>
		<span style="display:none" class="de"></span>
		<span style="display:none" class="es"></span>
		<span style="display:none" class="fr"></span>
		<span style="display:none" class="it"></span>
    		<span style="display:none" class="ja"></span>
		<span style="display:none" class="zh-CN"></span>
		<span style="display:none" class="zh-TW"></span>
	
	</a></li>
	<li id="videos-link"><a href="../../../videos/index.html" onClick="return loadLast('videos')">
	
		<span class="en">Videos</span>
		<span style="display:none" class="de"></span>
		<span style="display:none" class="es"></span>
		<span style="display:none" class="fr"></span>
		<span style="display:none" class="it"></span>
		<span style="display:none" class="ja">ビデオ</span>
		<span style="display:none" class="zh-CN"></span>
		<span style="display:none" class="zh-TW"></span>
	
	</a></li>
	<li><a href="http://android-developers.blogspot.com" onClick="return requestAppendHL(this.href)">
	
		<span class="en">Blog</span>
		<span style="display:none" class="de"></span>
		<span style="display:none" class="es"></span>
		<span style="display:none" class="fr"></span>
		<span style="display:none" class="it"></span>
		<span style="display:none" class="ja">ブログ</span>
		<span style="display:none" class="zh-CN">博客</span>
		<span style="display:none" class="zh-TW">網誌</span>
	
	</a></li>


     
</ul>
     
      </div>
      <div id="headerRight">
          <div id="headerLinks">
          
          <a href="http://www.android.com">Android.com</a>
          </div>
  <div id="search" >
      <div id="searchForm">
          <form accept-charset="utf-8" class="gsc-search-box" 
                onsubmit="return submit_search()">
            <table class="gsc-search-box" cellpadding="0" cellspacing="0"><tbody>
                <tr>
                  <td class="gsc-input">
                    <input id="search_autocomplete" class="gsc-input" type="text" size="33" autocomplete="off"
                      title="search developer docs" name="q"
                      value="search developer docs"
                      onFocus="search_focus_changed(this, true)"
                      onBlur="search_focus_changed(this, false)"
                      onkeydown="return search_changed(event, true, '../../../')"
                      onkeyup="return search_changed(event, false, '../../../')" />
                  <div id="search_filtered_div" class="no-display">
                      <table id="search_filtered" cellspacing=0>
                      </table>
                  </div>
                  </td>
                  <td class="gsc-search-button">
                    <input type="submit" value="Search" title="search" id="search-button" class="gsc-search-button" />
                  </td>
                  <td class="gsc-clear-button">
                    <div title="clear results" class="gsc-clear-button">&nbsp;</div>
                  </td>
                </tr></tbody>
              </table>
          </form>
      </div><!-- searchForm -->
  </div><!-- search -->
      </div><!-- headerRight -->
      <script type="text/javascript">
        <!--  
        changeTabLang(getLangPref());
        //-->
      </script>
  </div><!-- header -->

  <div class="g-section g-tpl-240" id="body-content">
    <div class="g-unit g-first" id="side-nav">
      <div id="devdoc-nav">
<ul>

  <li>
    <h2><span class="en">Android Basics</span>
        <span class="de" style="display:none">Einführung in Android</span>
        <span class="es" style="display:none">Información básica sobre Android</span>
        <span class="fr" style="display:none">Présentation d'Android</span>
        <span class="it" style="display:none">Nozioni di base su Android</span>
        <span class="ja" style="display:none">Android の基本</span>
        <span class="zh-CN" style="display:none">Android 基础知识</span>
        <span class="zh-TW" style="display:none">Android 簡介</span>
    </h2>
    <ul>
      <li><a href="../../../guide/basics/what-is-android.html">
        <span class="en">What Is Android?</span>
        <span class="de" style="display:none">Was ist Android?</span>
        <span class="es" style="display:none">¿Qué es Android?</span>
        <span class="fr" style="display:none">Qu'est-ce qu'Android&nbsp;?</span>
        <span class="it" style="display:none">Che cos'è Android?</span>
        <span class="ja" style="display:none">Android とは</span>
        <span class="zh-CN" style="display:none">Android 是什么？</span>
        <span class="zh-TW" style="display:none">什麼是 Android？</span>
          </a></li>
      <li><a href="../../../guide/topics/fundamentals.html">
        <span class="en">Application Fundamentals</span>
        <span class="de" style="display:none">Anwendungsgrundlagen</span>
        <span class="es" style="display:none">Fundamentos de las aplicaciones</span>
        <span class="fr" style="display:none">Principes de base des applications</span>
        <span class="it" style="display:none">Concetti fondamentali sulle applicazioni</span>
        <span class="ja" style="display:none">開発の基礎</span>
        <span class="zh-CN" style="display:none">应用程序基础</span>
        <span class="zh-TW" style="display:none">應用程式基本原理</span>
      </a></li>

  <!--  <li><a style="color:gray;">The Android SDK</a></li> -->
  <!--  <li><a style="color:gray;">Walkthrough for Developers</a></li> -->
      <!-- quick overview of what it's like to develop on Android -->
    </ul>
  </li>

  <li>
    <h2>
      <span class="en">Framework Topics</span>
      <span class="de" style="display:none">Framework-Themen</span>
      <span class="es" style="display:none">Temas sobre el framework</span>
      <span class="fr" style="display:none">Thèmes relatifs au framework</span>
      <span class="it" style="display:none">Argomenti relativi al framework</span>
      <span class="ja" style="display:none">フレームワーク トピック</span>
      <span class="zh-CN" style="display:none">框架主题</span>
      <span class="zh-TW" style="display:none">架構主題</span>
    </h2>
    <ul>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/fundamentals/activities.html">
          <span class="en">Activities</span>
        </a></div>
        <ul>
          <li><a href="../../../guide/topics/fundamentals/fragments.html">
            <span class="en">Fragments</span>
          </a></li>
          <li><a href="../../../guide/topics/fundamentals/loaders.html">
            <span class="en">Loaders</span>
          </a></li>
          <li><a href="../../../guide/topics/fundamentals/tasks-and-back-stack.html">
            <span class="en">Tasks and Back Stack</span></a></li>
        </ul>
      </li>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/fundamentals/services.html">
          <span class="en">Services</span>
        </a></div>
        <ul>
          <li><a href="../../../guide/topics/fundamentals/bound-services.html">
            <span class="en">Bound Services</span>
          </a></li>
        </ul>
      </li>
      <li><a href="../../../guide/topics/providers/content-providers.html">
            <span class="en">Content Providers</span>
          </a></li>
      <li><a href="../../../guide/topics/intents/intents-filters.html">
            <span class="en">Intents and Intent Filters</span>
          </a></li>
      <li><a href="../../../guide/topics/fundamentals/processes-and-threads.html">
            <span class="en">Processes and Threads</span>
          </a></li>
    </ul>


    <ul>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/ui/index.html">
            <span class="en">User Interface</span>
          </a></div>
        <ul>
          <li><a href="../../../guide/topics/ui/declaring-layout.html">
               <span class="en">XML Layouts</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/ui-events.html">
                <span class="en">Input Events</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/menus.html">
               <span class="en">Menus</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/actionbar.html">
               <span class="en">Action Bar</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/dialogs.html">
                <span class="en">Dialogs</span>
              </a></li>
          <li class="toggle-list">
            <div><a href="../../../guide/topics/ui/notifiers/index.html">
                <span class="en">Notifications</span>
            </a></div>
            <ul>
              <li><a href="../../../guide/topics/ui/notifiers/toasts.html">
                <span class="en">Toast Notifications</span>
              </a></li>
              <li><a href="../../../guide/topics/ui/notifiers/notifications.html">
                <span class="en">Status Bar Notifications</span>
              </a></li>
            </ul>
          </li>
          <li><a href="../../../guide/topics/ui/drag-drop.html">
                <span class="en">Drag and Drop</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/themes.html">
                <span class="en">Styles and Themes</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/custom-components.html">
                <span class="en">Custom Components</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/binding.html">
                <span class="en">Binding to Data with AdapterView</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/layout-objects.html">
                <span class="en">Common Layout Objects</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/how-android-draws.html">
                <span class="en">How Android Draws Views</span>
              </a></li>
        </ul>
      </li><!-- end of User Interface -->

      <li class="toggle-list">
        <div><a href="../../../guide/topics/resources/index.html">
               <span class="en">Application Resources</span>
             </a></div>
        <ul>
          <li><a href="../../../guide/topics/resources/providing-resources.html">
                <span class="en">Providing Resources</span>
              </a></li>
          <li><a href="../../../guide/topics/resources/accessing-resources.html">
                <span class="en">Accessing Resources</span>
              </a></li>
          <li><a href="../../../guide/topics/resources/runtime-changes.html">
                <span class="en">Handling Runtime Changes</span>
              </a></li>
          <li><a href="../../../guide/topics/resources/localization.html">
                <span class="en">Localization</span>
              </a></li>
          <li class="toggle-list">
            <div><a href="../../../guide/topics/resources/available-resources.html">
              <span class="en">Resource Types</span>
            </a></div>
            <ul>
              <li><a href="../../../guide/topics/resources/animation-resource.html">Animation</a></li>
              <li><a href="../../../guide/topics/resources/color-list-resource.html">Color State List</a></li>
              <li><a href="../../../guide/topics/resources/drawable-resource.html">Drawable</a></li>
              <li><a href="../../../guide/topics/resources/layout-resource.html">Layout</a></li>
              <li><a href="../../../guide/topics/resources/menu-resource.html">Menu</a></li>
              <li><a href="../../../guide/topics/resources/string-resource.html">String</a></li>
              <li><a href="../../../guide/topics/resources/style-resource.html">Style</a></li>
              <li><a href="../../../guide/topics/resources/more-resources.html">More Types</a></li>
            </ul>
          </li><!-- end of resource types -->
        </ul>
      </li><!-- end of app resources -->
      <li class="toggle-list">
        <div><a href="../../../guide/topics/data/data-storage.html">
            <span class="en">Data Storage</span>
          </a></div>
          <ul>
            <li><a href="../../../guide/topics/data/backup.html">
                <span class="en">Data Backup</span>
              </a>
            </li>
          </ul>
      </li>
      <li><a href="../../../guide/topics/security/security.html">
            <span class="en">Security and Permissions</span>
          </a></li>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/manifest/manifest-intro.html">
          <span class="en">The AndroidManifest.xml File</span>
        </a></div>
        <ul>
          <li><a href="../../../guide/topics/manifest/action-element.html">&lt;action&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/activity-alias-element.html">&lt;activity-alias&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/application-element.html">&lt;application&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/category-element.html">&lt;category&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/compatible-screens-element.html">&lt;compatible-screens&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/data-element.html">&lt;data&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/grant-uri-permission-element.html">&lt;grant-uri-permission&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/instrumentation-element.html">&lt;instrumentation&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/intent-filter-element.html">&lt;intent-filter&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/meta-data-element.html">&lt;meta-data&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/path-permission-element.html">&lt;path-permission&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/permission-element.html">&lt;permission&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/permission-group-element.html">&lt;permission-group&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/permission-tree-element.html">&lt;permission-tree&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/provider-element.html">&lt;provider&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/receiver-element.html">&lt;receiver&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/service-element.html">&lt;service&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></li><!-- ##api level 4## -->
          <li><a href="../../../guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></li> <!-- ##api level 4## -->
          <li><a href="../../../guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></li>
        </ul>
      </li><!-- end of the manifest file -->
    </ul>

    <ul>
    <li class="toggle-list">
        <div><a href="../../../guide/topics/graphics/index.html">
            <span class="en">Graphics</span>
          </a><span class="new-child">new!</span></div>
        <ul>
          <li><a href="../../../guide/topics/graphics/2d-graphics.html">
              <span class="en">Canvas and Drawables</span></a></li>
          <li><a href="../../../guide/topics/graphics/hardware-accel.html">
              <span class="en">Hardware Acceleration</span></a>
            <span class="new">new!</span></li>
          <li><a href="../../../guide/topics/graphics/opengl.html">
              <span class="en">OpenGL</span>
            </a><span class="new">updated</span></li>
        </ul>
      </li>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/graphics/animation.html">
            <span class="en">Animation</span>
          </a></div>
        <ul>
          <li><a href="../../../guide/topics/graphics/prop-animation.html">
              <span class="en">Property Animation</span></a></li>
          <li><a href="../../../guide/topics/graphics/view-animation.html">
              <span class="en">View Animation</span></a></li>
          <li><a href="../../../guide/topics/graphics/drawable-animation.html">
              <span class="en">Drawable Animation</span></a></li>
        </ul>
      </li>
      <li class="toggle-list">
	        <div><a href="../../../guide/topics/renderscript/index.html">
	            <span class="en">RenderScript</span>
	          </a></div>
	        <ul>
	          <li><a href="../../../guide/topics/renderscript/graphics.html">
	                <span class="en">Graphics</span>
	              </a>
	          </li>
	          <li><a href="../../../guide/topics/renderscript/compute.html">
	                <span class="en">Compute</span>
	              </a>
	          </li>
	        </ul>
  	  </li>

      <li class="toggle-list">
          <div><a href="../../../guide/topics/media/index.html">
            <span class="en">Multimedia and Camera</span>
          </a><span class="new">updated</span></div>
          <ul>
            <li><a href="../../../guide/topics/media/mediaplayer.html">
                  <span class="en">Media Playback</span></a>
                </li>
            <li><a href="../../../guide/topics/media/jetplayer.html">
                  <span class="en">JetPlayer</span></a>
                </li>
            <li><a href="../../../guide/topics/media/camera.html">
                  <span class="en">Camera</span></a>
                  <span class="new">new!</span>
                </li>
            <li><a href="../../../guide/topics/media/audio-capture.html">
                  <span class="en">Audio Capture</span></a>
                </li>
          </ul>
      </li>
      <li>
        <a href="../../../guide/topics/clipboard/copy-paste.html">
            <span class="en">Copy and Paste</span>
        </a></li>
  <!--<li class="toggle-list">
        <div><a style="color:gray;">Sensors</a></div>
          <ul>
            <li><a style="color:gray;">Camera</a></li>
            <li><a style="color:gray;">Compass</a></li>
            <li><a style="color:gray;">Accelerometer</a></li>
          </ul>
      </li> -->
      <li class="toggle-list">
        <div><a href="../../../guide/topics/location/index.html">
               <span class="en">Location and Maps</span>
             </a></div>
        <ul>
          <li><a href="../../../guide/topics/location/obtaining-user-location.html">
                <span class="en">Obtaining User Location</span>
              </a></li>
        </ul>
      </li>
  <!--<li class="toggle-list">
        <div><a style="color:gray;">Wireless Controls</a></div>
          <ul>
            <li><a style="color:gray;">Wi-Fi</a></li>
          </ul>
      </li> -->
  <!--<li><a style="color:gray;">Localization</a></li>  -->
      <li><a href="../../../guide/topics/appwidgets/index.html">
            <span class="en">App Widgets</span></a>
          </li>
      <li><a href="../../../guide/topics/wireless/bluetooth.html">
            <span class="en">Bluetooth</span></a>
          </li>
      <li><a href="../../../guide/topics/nfc/index.html">
            <span class="en">Near Field Communication</span>
          </a></li>
      <li class="toggle-list">
          <div><a href="../../../guide/topics/usb/index.html">
            <span class="en">USB</span></a>
          </div>
            <ul>
              <li><a href="../../../guide/topics/usb/accessory.html">Accessory</a></li>
              <li><a href="../../../guide/topics/usb/host.html">Host</a></li>
              <li><a href="../../../guide/topics/usb/adk.html">Open Accessory Dev Kit</a></li>
            </ul>
          </li>

       <li><a href="../../../guide/topics/network/sip.html">
            <span class="en">Session Initiation Protocol</span>
          </a></li>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/search/index.html">
            <span class="en">Search</span>
          </a></div>
          <ul>
            <li><a href="../../../guide/topics/search/search-dialog.html">Creating a Search Interface</a></li>
            <li><a href="../../../guide/topics/search/adding-recent-query-suggestions.html">Adding Recent Query Suggestions</a></li>
            <li><a href="../../../guide/topics/search/adding-custom-suggestions.html">Adding Custom Suggestions</a></li>
            <li><a href="../../../guide/topics/search/searchable-config.html">Searchable Configuration</a></li>
          </ul>
      </li>
      <li><a href="../../../guide/topics/admin/device-admin.html">
            <span class="en">Device Administration</span></a>
      </li>
      <li class="toggle-list">
           <div>
                <a href="../../../guide/topics/testing/index.html">
                   <span class="en">Testing</span>
               </a>
           </div>
           <ul>
              <li>
                <a href="../../../guide/topics/testing/testing_android.html">
                <span class="en">Testing Fundamentals</span></a>
              </li>
              <li>
                <a href="../../../guide/topics/testing/activity_testing.html">
                <span class="en">Activity Testing</span></a>
              </li>
              <li>
                <a href="../../../guide/topics/testing/contentprovider_testing.html">
                <span class="en">Content Provider Testing</span></a>
              </li>
              <li>
                <a href="../../../guide/topics/testing/service_testing.html">
                <span class="en">Service Testing</span></a>
              </li>
              <li>
                <a href="../../../guide/topics/testing/what_to_test.html">
                <span class="en">What To Test</span></a>
              </li>
           </ul>
      </li>
    </ul>
  </li>

  <li>
    <h2>
      <span class="en">Android Market Topics</span>
    </h2>
    <ul>
      <li><a href="../../../guide/publishing/licensing.html">
          <span class="en">Application Licensing</span></a>
      </li>
      <li class="toggle-list">
        <div><a href="../../../guide/market/billing/index.html">
            <span class="en">In-app Billing</span></a>
        </div>
        <ul>
          <li><a href="../../../guide/market/billing/billing_overview.html">
              <span class="en">In-app Billing Overview</span></a>
          </li>
          <li><a href="../../../guide/market/billing/billing_integrate.html">
              <span class="en">Implementing In-app Billing</span></a>
          </li>
          <li><a href="../../../guide/market/billing/billing_best_practices.html">
              <span class="en">Security and Design</span></a>
          </li>
          <li><a href="../../../guide/market/billing/billing_testing.html">
              <span class="en">Testing In-app Billing</span></a>
          </li>
          <li><a href="../../../guide/market/billing/billing_admin.html">
              <span class="en">Administering In-app Billing</span></a>
          </li>
          <li><a href="../../../guide/market/billing/billing_reference.html">
              <span class="en">In-app Billing Reference</span></a>
          </li>
        </ul>
      </li>
      <li><a href="../../../guide/appendix/market-filters.html">
          <span class="en">Market Filters</span></a>
      </li>
      <li><a href="../../../guide/market/publishing/multiple-apks.html">
          <span class="en">Multiple APK Support</span></a>
      </li>
    </ul>
  </li>


  <li>
    <h2><span class="en">Developing</span>
               <span class="de" style="display:none">Entwicklung</span>
               <span class="es" style="display:none">Desarrollo</span>
               <span class="fr" style="display:none">Développement</span>
               <span class="it" style="display:none">Sviluppo</span>
               <span class="ja" style="display:none">開発</span>
               <span class="zh-CN" style="display:none">开发</span>
               <span class="zh-TW" style="display:none">開發</span>
    </h2>
    <ul>
  <!--<li><a href="">Developing for Android</a></li>
      signing, upgrading, selecting a package name, select device profile, touch, trackball, dpad available, etc. -->
      <li>
        <a href="../../../guide/developing/index.html">
        <span class="en">Introduction</span></a>
      </li>

      <li class="toggle-list">
        <div>
           <a href="../../../guide/developing/devices/index.html">
                <span class="en">Managing Virtual Devices</span>
            </a>
        </div>
        <ul>
          <li>
            <a href="../../../guide/developing/devices/managing-avds.html">
              <span class="en">With AVD Manager</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/devices/managing-avds-cmdline.html">
              <span class="en">From the Command Line</span>
            </a>
          </li>
          <li>
           <a href="../../../guide/developing/devices/emulator.html">
                <span class="en">Using the Android Emulator</span>
            </a>
          </li>
        </ul>
      </li>
      <li>
        <a href="../../../guide/developing/device.html">
          <span class="en">Using Hardware Devices</span>
        </a>
      </li>

      <li class="toggle-list">
        <div>
          <a href="../../../guide/developing/projects/index.html">
            <span class="en">Managing Projects</span>
          </a>
        </div>
        <ul>
          <li>
            <a href="../../../guide/developing/projects/projects-eclipse.html">
              <span class="en">From Eclipse with ADT</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/projects/projects-cmdline.html">
                <span class="en">From the Command Line</span>
            </a>
          </li>
        </ul>
      </li>

      <li class="toggle-list">
        <div>
          <a href="../../../guide/developing/building/index.html">
            <span class="en">Building and Running</span>
          </a>
        </div>
        <ul>
          <li><a href="../../../guide/developing/building/building-eclipse.html">
            <span class="en">From Eclipse with ADT</span>
          </a></li>
          <li><a href="../../../guide/developing/building/building-cmdline.html">
            <span class="en">From the Command Line</span></a></li>
        </ul>
      </li>

      <li class="toggle-list">
        <div>
          <a href="../../../guide/developing/debugging/index.html">
            <span class="en">Debugging</span>
          </a>
        </div>
        <ul>
          <li>
            <a href="../../../guide/developing/debugging/debugging-projects.html">
                <span class="en">From Eclipse with ADT</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/debugging-projects-cmdline.html">
                <span class="en">From Other IDEs</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/ddms.html">
              <span class="en">Using DDMS</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/debugging-log.html">
                <span class="en">Reading and Writing Logs</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/debugging-ui.html">
                <span class="en">Debugging and Profiling UIs</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/debugging-tracing.html">
                <span class="en">Profiling with Traceview and dmtracedump</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/debugging-devtools.html">
                <span class="en">Using the Dev Tools App</span>
            </a>
          </li>
        </ul>
      </li>

      <li class="toggle-list">
           <div>
                <a href="../../../guide/developing/testing/index.html">
                   <span class="en">Testing</span>
               </a>
           </div>
           <ul>
              <li>
                <a href="../../../guide/developing/testing/testing_eclipse.html">
                  <span class="en">From Eclipse with ADT</span>
                </a>
              </li>

              <li>
                <a href="../../../guide/developing/testing/testing_otheride.html">
                  <span class="en">From Other IDEs</span>
                </a>
              </li>
           </ul>
         </li>

         <li class="toggle-list">
        <div><a href="../../../guide/developing/tools/index.html">
            <span class="en">Tools</span>
          </a></div>
        <ul>
          <li><a href="../../../guide/developing/tools/adb.html">adb</a></li>
          <li><a href="../../../guide/developing/tools/adt.html">ADT</a></li>
          <li><a href="../../../guide/developing/tools/android.html">android</a></li>
          <li><a href="../../../guide/developing/tools/bmgr.html">bmgr</a>
          <li><a href="../../../guide/developing/tools/dmtracedump.html">dmtracedump</a></li>
          <li><a href="../../../guide/developing/tools/draw9patch.html">Draw
          9-Patch</a></li>
          <li><a href="../../../guide/developing/tools/emulator.html">Emulator</a></li>
          <li><a href="../../../guide/developing/tools/etc1tool.html">etc1tool</a></li>
          <li><a href="../../../guide/developing/tools/hierarchy-viewer.html">Hierarchy Viewer</a></li>
          <li><a href="../../../guide/developing/tools/hprof-conv.html">hprof-conv</a></li>
          <li><a href="../../../guide/developing/tools/layoutopt.html">layoutopt</a></li>
          <li><a href="../../../guide/developing/tools/logcat.html">logcat</a></li>
          <li><a href="../../../guide/developing/tools/mksdcard.html">mksdcard</a></li>
          <li><a href="../../../guide/developing/tools/monkey.html">Monkey</a></li>
          <li class="toggle-list">
            <div><a href="../../../guide/developing/tools/monkeyrunner_concepts.html">
              <span class="en">monkeyrunner</span>
            </a></div>
            <ul>
              <li><a href="../../../guide/developing/tools/MonkeyDevice.html">
                <span class="en">MonkeyDevice</span>
                </a></li>
              <li><a href="../../../guide/developing/tools/MonkeyImage.html">
                <span class="en">MonkeyImage</span>
                </a></li>
              <li><a href="../../../guide/developing/tools/MonkeyRunner.html">
                <span class="en">MonkeyRunner</span>
                </a></li>
            </ul>
          </li>
          <li><a href="../../../guide/developing/tools/proguard.html">ProGuard</a></li>
          <li><a href="../../../guide/developing/tools/adb.html#sqlite">sqlite3</a></li>
          <li><a href="../../../guide/developing/tools/traceview.html">Traceview</a></li>
          <li><a href="../../../guide/developing/tools/zipalign.html">zipalign</a></li>
        </ul>
      </li>
    </ul>
  </li>

  <li>
    <h2><span class="en">Publishing</span>
        <span class="de" style="display:none">Veröffentlichung</span>
        <span class="es" style="display:none">Publicación</span>
        <span class="fr" style="display:none">Publication</span>
        <span class="it" style="display:none">Pubblicazione</span>
        <span class="ja" style="display:none">公開</span>
        <span class="zh-CN" style="display:none">发布</span>
        <span class="zh-TW" style="display:none">發佈</span>
    </h2>
    <ul>
      <li><a href="../../../guide/publishing/app-signing.html">
            <span class="en">Signing Your Applications</span>
            <span class="de" style="display:none">Signieren Ihrer Anwendungen</span>
            <span class="es" style="display:none">Firma de aplicaciones</span>
            <span class="fr" style="display:none">Attribution de votre signature <br />à vos applications</span>
            <span class="it" style="display:none">Firma delle applicazioni</span>
            <span class="ja" style="display:none">アプリケーションへの署名</span>
            <span class="zh-CN" style="display:none">应用程序签名</span>
            <span class="zh-TW" style="display:none">簽署應用程式</span>
          </a></li>
      <li><a href="../../../guide/publishing/versioning.html">
            <span class="en">Versioning Your Applications</span>
            <span class="de" style="display:none">Versionsverwaltung für Ihre <br />Anwendungen</span>
            <span class="es" style="display:none">Versiones de las aplicaciones</span>
            <span class="fr" style="display:none">Attribution d'une version à vos applications</span>
            <span class="it" style="display:none">Controllo versioni delle applicazioni</span>
            <span class="ja" style="display:none">アプリケーションのバージョニング</span>
            <span class="zh-CN" style="display:none">应用程序版本控制</span>
            <span class="zh-TW" style="display:none">應用程式版本設定</span>
          </a></li>
      <li><a href="../../../guide/publishing/preparing.html">
            <span class="en">Preparing to Publish</span>
            <span class="de" style="display:none">Vorbereitung auf die Veröffentlichung</span>
            <span class="es" style="display:none">Publicación de aplicaciones</span>
            <span class="fr" style="display:none">Préparation à la publication</span>
            <span class="it" style="display:none">Preparativi per la pubblicazione</span>
            <span class="ja" style="display:none">公開の準備</span>
            <span class="zh-CN" style="display:none">准备发布</span>
            <span class="zh-TW" style="display:none">準備發佈</span>
          </a></li>
      <li><a href="../../../guide/publishing/publishing.html">
            <span class="en">Publishing on Android Market</span>
          </a></li>
    </ul>
  </li>

  <li>
    <h2><span class="en">Best Practices</span>
               <span class="de" style="display:none">Bewährte Verfahren</span>
               <span class="es" style="display:none">Prácticas recomendadas</span>
               <span class="fr" style="display:none">Meilleures pratiques</span>
               <span class="it" style="display:none">Best practice</span>
               <span class="ja" style="display:none">ベスト プラクティス</span>
               <span class="zh-CN" style="display:none">最佳实践</span>
               <span class="zh-TW" style="display:none">最佳實務</span>
    </h2>
    <ul>
      <li><a href="../../../guide/practices/compatibility.html">
            <span class="en">Compatibility</span>
          </a></li>
      <li class="toggle-list">
        <div><a href="../../../guide/practices/screens_support.html">
          <span class="en">Supporting Multiple Screens</span>
        </a></div>
        <ul>
          <li><a href="../../../guide/practices/screens-distribution.html">
            <span class="en">Distributing to Specific Screens</span>
          </a></li>
          <li><a href="../../../guide/practices/screen-compat-mode.html">
            <span class="en">Screen Compatibility Mode</span>
          </a></li>
          <li><a href="../../../guide/practices/screens-support-1.5.html">
            <span class="en">Strategies for Android 1.5</span>
          </a></li>
        </ul>
      </li>
      <li><a href="../../../guide/practices/optimizing-for-3.0.html">
            <span class="en">Optimizing Apps for Android 3.0</span>
          </a></li>
      <li class="toggle-list">
        <div><a href="../../../guide/practices/ui_guidelines/index.html">
               <span class="en">UI Guidelines</span>
             </a></div>
        <ul>
          <li class="toggle-list">
            <div><a href="../../../guide/practices/ui_guidelines/icon_design.html">
                   <span class="en">Icon Design <span class="new">updated</span></span>
                 </a></div>
            <ul>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_launcher.html">
                    <span class="en">Launcher Icons <span class="new">updated</span></span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_menu.html">
                    <span class="en">Menu Icons</span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_action_bar.html">
                    <span class="en">Action Bar Icons <span class="new">new!</span></span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_status_bar.html">
                    <span class="en">Status Bar Icons <span class="new">updated</span></span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_tab.html">
                    <span class="en">Tab Icons</span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_dialog.html">
                    <span class="en">Dialog Icons</span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_list.html">
                    <span class="en">List View Icons</span>
                  </a></li>
            </ul>
          </li>
          <li><a href="../../../guide/practices/ui_guidelines/widget_design.html">
                <span class="en">App Widget Design <span class="new">updated</span></span>
              </a></li>
          <li><a href="../../../guide/practices/ui_guidelines/activity_task_design.html">
                <span class="en">Activity and Task Design</span>
              </a></li>
          <li><a href="../../../guide/practices/ui_guidelines/menu_design.html">
                <span class="en">Menu Design</span>
              </a></li>
        </ul>
      </li>
      </ul>
      <ul>
      <li><a href="../../../guide/practices/design/accessibility.html">
            <span class="en">Designing for Accessibility</span>
          </a></li>
      <li class="toggle-list">
        <div><a href="../../../guide/practices/design/performance.html">
            <span class="en">Designing for Performance</span>
          </a></div>
        <ul>
          <li><a href="../../../guide/practices/design/jni.html">
                <span class="en">JNI Tips</span>
              </a></li>
        </ul>
      </li>
      <li><a href="../../../guide/practices/design/responsiveness.html">
            <span class="en">Designing for Responsiveness</span>
          </a></li>
      <li><a href="../../../guide/practices/design/seamlessness.html">
            <span class="en">Designing for Seamlessness</span>
          </a></li>
    </ul>
  </li>

  <li>
    <h2><span class="en">Web Applications</span>
    </h2>
    <ul>
      <li><a href="../../../guide/webapps/index.html">
            <span class="en">Web Apps Overview</span>
          </a></li>
      <li><a href="../../../guide/webapps/targeting.html">
            <span class="en">Targeting Screens from Web Apps</span>
          </a></li>
      <li><a href="../../../guide/webapps/webview.html">
            <span class="en">Building Web Apps in WebView</span>
          </a></li>
      <li><a href="../../../guide/webapps/debugging.html">
            <span class="en">Debugging Web Apps</span>
          </a></li>
      <li><a href="../../../guide/webapps/best-practices.html">
            <span class="en">Best Practices for Web Apps</span>
          </a></li>
    </ul>
  </li>

  <li>
    <h2><span class="en">Appendix</span>
               <span class="de" style="display:none">Anhang</span>
               <span class="es" style="display:none">Apéndice</span>
               <span class="fr" style="display:none">Annexes</span>
               <span class="it" style="display:none">Appendice</span>
               <span class="ja" style="display:none">付録</span>
               <span class="zh-CN" style="display:none">附录</span>
               <span class="zh-TW" style="display:none">附錄</span>
    </h2>
    <ul>
      <li><a href="../../../guide/appendix/api-levels.html">
            <span class="en">Android API Levels</span>
          </a></li>
      <li><a href="../../../guide/appendix/install-location.html">
            <span class="en">App Install Location</span>
          </a></li>
      <li><a href="../../../guide/appendix/media-formats.html">
            <span class="en">Supported Media Formats <span class="new">updated</span></span>
          </a></li>
      <li><a href="../../../guide/appendix/g-app-intents.html">
            <span class="en">Intents List: Google Apps</span>
          </a></li>
      <li><a href="../../../guide/developing/tools/aidl.html">AIDL</a></li>
      <li><a href="../../../guide/appendix/glossary.html">
            <span class="en">Glossary</span>
          </a></li>
    </ul>
  </li>

</ul>

<script type="text/javascript">
<!--
    buildToggleLists();
    changeNavLang(getLangPref());
//-->
</script>

      </div>
    </div> <!-- end side-nav -->
    <script>
      addLoadEvent(function() {
        scrollIntoView("devdoc-nav");
        });
    </script>




<div class="g-unit" id="doc-content"><a name="top"></a>

<div id="jd-header" class="guide-header">
  <span class="crumb">
    
      <a href="index.html">Graphics</a> >
    
  </span>
<h1>Hardware Acceleration</h1>
</div>

  <div id="jd-content">

    <div class="jd-descr">
    <div id="qv-wrapper">
    <div id="qv">
      <h2>In this document</h2>

      <ol>
        <li><a href="#controlling">Controlling Hardware Acceleration</a></li>
        <li><a href="#determining">Determining if a View is Hardware Accelerated</a></li>
        <li><a href="#model">Android Drawing Models</a>

          <ol>
            <li><a href="#software-model">Software-based drawing model</a></li>
            <li><a href="#hardware-model">Hardware accelerated drawing model</a></li>
          </ol>
        </li>

        <li>
          <a href="#unsupported">Unsupported Drawing Operations</a>
        </li>



        <li>
          <a href="#layers">View Layers</a>

          <ol>
            <li><a href="#layers-anims">View Layers and Animations</a></li>
          </ol>
        </li>

        <li><a href="#tips">Tips and Tricks</a></li>
      </ol>

      <h2>See also</h2>

      <ol>
        <li><a href="../../../guide/topics/graphics/opengl.html">OpenGL with the Framework
        APIs</a></li>

        <li><a href="../../../guide/topics/renderscript/index.html">RenderScript</a></li>
      </ol>
    </div>
  </div>

  <p>Beginning in Android 3.0 (API level 11), the Android 2D rendering pipeline is designed to
  better support hardware acceleration. Hardware acceleration carries out all drawing operations
  that are performed on a <code><a href="../../../reference/android/view/View.html">View</a></code>'s canvas using the GPU.</p>

  <p>The easiest way to enable hardware acceleration is to turn it on
  globally for your entire application. If your application uses only standard views and <code><a href="../../../reference/android/graphics/drawable/Drawable.html">Drawable</a></code>s, turning it on globally should not cause any adverse
  effects. However, because hardware acceleration is not supported for all of the 2D drawing
  operations, turning it on might affect some of your applications that use custom views or drawing
  calls. Problems usually manifest themselves as invisible elements, exceptions, or wrongly
  rendered pixels. To remedy this, Android gives you the option to enable or disable hardware
  acceleration at the following levels:</p>

  <ul>
    <li>Application</li>

    <li>Activity</li>

    <li>Window</li>

    <li>View</li>
  </ul>

  <p>If your application performs custom drawing, test your application on actual hardware
devices with hardware acceleration turned on to find any problems. The <a
href="#drawing-support">Unsupported drawing operations</a> section describes known issues with
drawing operations that cannot be hardware accelerated and how to work around them.</p>


 <h2 id="controlling">Controlling Hardware Acceleration</h2>
  <p>You can control hardware acceleration at the following levels:</p>
  <ul>
    <li>Application</li>

    <li>Activity</li>

    <li>Window</li>

    <li>View</li>
  </ul>

  <h4>Application level</h4>
  <p>In your Android manifest file, add the following attribute to the
  <a href="../../../guide/topics/manifest/application-element.html">
    <code>&lt;application&gt;</code></a> tag to enable hardware acceleration for your entire
  application:</p>

<pre>
&lt;application android:hardwareAccelerated="true" ...&gt;
</pre>

  <h4>Activity level</h4>
  <p>If your application does not behave properly with hardware acceleration turned on globally,
  you can control it for individual activities as well. To enable or disable hardware acceleration
  at the  activity level, you can use the <code>android:hardwareAccelerated</code>
  attribute for the <a href="../../../guide/topics/manifest/activity-element.html">
    <code>&lt;activity&gt;</code></a> element. The following example enables hardware acceleration
for the  entire application but disables it for one activity:</p>

<pre>
&lt;application android:hardwareAccelerated="true"&gt;
    &lt;activity ... /&gt;
    &lt;activity android:hardwareAccelerated="false" /&gt;
&lt;/application&gt;
</pre>

  <h4>Window level</h4>
  <p>If you need even more fine-grained control, you can enable hardware acceleration for a given
  window with the following code:</p>

<pre>
getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

</pre>

<p class="note"><strong>Note</strong>:  You currently cannot disable hardware acceleration at
the window level.</p>

  <h4>View level</h4>

  <p>You can disable hardware acceleration for an individual view at runtime with the
following code:</p>

<pre>
myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
</pre>

<p class="note"><strong>Note</strong>: You currently cannot enable hardware acceleration at
the view level. View layers have other functions besides disabling hardware acceleration. See <a
href="#layers">View layers</a> for more information about their uses.</p>

  <h2 id="determining">Determining if a View is Hardware Accelerated</h2>

  <p>It is sometimes useful for an application to know whether it is currently hardware
  accelerated, especially for things such as custom views. This is particularly useful if your
  application does a lot of custom drawing and not all operations are properly supported by the new
  rendering pipeline.</p>

  <p>There are two different ways to check whether the application is hardware accelerated:</p>

  <ul>
    <li><code><a href="../../../reference/android/view/View.html#isHardwareAccelerated()">View.isHardwareAccelerated()</a></code> returns
    <code>true</code> if the <code><a href="../../../reference/android/view/View.html">View</a></code> is attached to a hardware accelerated
    window.</li>

    <li><code><a href="../../../reference/android/graphics/Canvas.html#isHardwareAccelerated()">Canvas.isHardwareAccelerated()</a></code>
    returns <code>true</code> if the <code><a href="../../../reference/android/graphics/Canvas.html">Canvas</a></code> is hardware accelerated</li>
  </ul>

  <p>If you must do this check in your drawing code, use <code><a href="../../../reference/android/graphics/Canvas.html#isHardwareAccelerated()">Canvas.isHardwareAccelerated()</a></code> instead of <code><a href="../../../reference/android/view/View.html#isHardwareAccelerated()">View.isHardwareAccelerated()</a></code> when possible. When a view
  is attached to a hardware accelerated window, it can still be drawn using a non-hardware
  accelerated Canvas. This happens, for instance, when drawing a view into a bitmap for caching
  purposes.</p>


  <h2 id="model">Android Drawing Models</h2>

  <p>When hardware acceleration is enabled, the Android framework utilizes a new drawing model that
  utilizes <em>display lists</em> to render your application to the screen. To fully understand
  display lists and how they might affect your application, it is useful to understand how Android
  draws views without hardware acceleration as well. The following sections describe the
  software-based  and hardware-accelerated drawing models.</p>

<h3>Software-based drawing model</h3>
<p>In the software drawing model, views are drawn with the following two steps:</p>
  <ol>
    <li>Invalidate the hierarchy</li>

    <li>Draw the hierarchy</li>
  </ol>

  <p>Whenever an application needs to update a part of its UI, it invokes <code><a href="../../../reference/android/view/View.html#invalidate()">invalidate()</a></code> (or one of its variants) on any view that has changed
  content. The invalidation messages are propagated all the way up the view hierarchy to compute
  the regions of the screen that need to be redrawn (the dirty region). The Android system then
  draws any view in the hierarchy that intersects with the dirty region. Unfortunately, there are
  two drawbacks to this drawing model:</p>
  <ul>
    <li>First, this model requires execution of a lot of code on every draw pass. For example, if
your application calls <code><a href="../../../reference/android/view/View.html#invalidate()">invalidate()</a></code> on a button and that
button sits on top of another view, the Android system redraws the view even though it hasn't
changed.</li>
    <li>The second issue is that the drawing model can hide bugs in your application. Since the
  Android system redraws views when they intersect the dirty region, a view whose content you
  changed might be redrawn even though <code><a href="../../../reference/android/view/View.html#invalidate()">invalidate()</a></code> was not
  called on it. When this happens, you are relying on another view being invalidated to obtain the
  proper behavior. This behavior can change every time you modify your application. Because of
  this, you should always call <code><a href="../../../reference/android/view/View.html#invalidate()">invalidate()</a></code> on your custom
  views whenever you modify data or state that affects the view’s drawing code.</li>
</ul>

  <p class="note"><strong>Note</strong>: Android views automatically call <code><a href="../../../reference/android/view/View.html#invalidate()">invalidate()</a></code> when their properties change, such as the background
  color or the text in a <code><a href="../../../reference/android/widget/TextView.html">TextView</a></code>.</p>

  <h3>Hardware accelerated drawing model</h3>
  <p>The Android system still uses <code><a href="../../../reference/android/view/View.html#invalidate()">invalidate()</a></code> and <code><a href="../../../reference/android/view/View.html#draw(android.graphics.Canvas)">draw()</a></code> to request screen updates and to render views, but handles the
  actual drawing differently. Instead of executing the drawing commands immediately, the Android
  system records them inside display lists, which contain the output of the view hierarchy’s
  drawing code. Another optimization is that the Android system only needs to record and update
  display lists for views marked dirty by an <code><a href="../../../reference/android/view/View.html#invalidate()">invalidate()</a></code>
  call. Views that have not been invalidated can be redrawn simply by re-issuing the previously
  recorded display list. The new drawing model contains three stages:</p>

  <ol>
    <li>Invalidate the hierarchy</li>

    <li>Record and update display lists</li>

    <li>Draw the display lists</li>
  </ol>

  <p>With this model, you cannot rely on a view intersecting the dirty region to have its <code><a href="../../../reference/android/view/View.html#draw(android.graphics.Canvas)">draw()</a></code> method executed. To ensure that the Android system records a
  view’s display list, you must call <code><a href="../../../reference/android/view/View.html#invalidate()">invalidate()</a></code>. Forgetting
  to do so causes a view to look the same even after changing it, which is an easier bug to find if
  it happens.</p>

  <p>Using display lists also benefits animation performance because setting specific properties,
  such as alpha or rotation, does not require invalidating the targeted view (it is done
  automatically). This optimization also applies to views with display lists (any view when your
  application is hardware accelerated.) For example, assume there is a <code><a href="../../../reference/android/widget/LinearLayout.html">LinearLayout</a></code> that contains a <code><a href="../../../reference/android/widget/ListView.html">ListView</a></code> above a <code><a href="../../../reference/android/widget/Button.html">Button</a></code>. The display list for the <code><a href="../../../reference/android/widget/LinearLayout.html">LinearLayout</a></code> looks like
  this:</p>

  <ul>
    <li>DrawDisplayList(ListView)</li>

    <li>DrawDisplayList(Button)</li>
  </ul>

  <p>Assume now that you want to change the <code><a href="../../../reference/android/widget/ListView.html">ListView</a></code>'s opacity. After
  invoking <code>setAlpha(0.5f)</code> on the <code><a href="../../../reference/android/widget/ListView.html">ListView</a></code>, the display list now
  contains this:</p>

  <ul>
    <li>SaveLayerAlpha(0.5)</li>

    <li>DrawDisplayList(ListView)</li>

    <li>Restore</li>

    <li>DrawDisplayList(Button)</li>
  </ul>

  <p>The complex drawing code of <code><a href="../../../reference/android/widget/ListView.html">ListView</a></code> was not executed. Instead, the
  system only updated the display list of the much simpler <code><a href="../../../reference/android/widget/LinearLayout.html">LinearLayout</a></code>. In
  an application without hardware acceleration enabled, the drawing code of both the list and its
  parent are executed again.</p>

  <h2 id="unsupported">Unsupported Drawing Operations</h2>

  <p>When hardware accelerated, the 2D rendering pipeline supports the most commonly used <code><a href="../../../reference/android/graphics/Canvas.html">Canvas</a></code> drawing operations as well as many less-used operations. All of the
  drawing operations that are used to render applications that ship with Android, default widgets
  and layouts, and common advanced visual effects such as reflections and tiled textures are
  supported. The following list describes known operations that are <strong>not supported</strong>
  with hardware acceleration:</p>

  <ul>
    <li>
      <strong>Canvas</strong>

      <ul>
        <li><code><a href="../../../reference/android/graphics/Canvas.html#clipPath(android.graphics.Path)">clipPath()</a></code></li>

        <li><code><a href="../../../reference/android/graphics/Canvas.html#clipRegion(android.graphics.Region)">clipRegion()</a></code></li>

        <li><code><a href="../../../reference/android/graphics/Canvas.html#drawPicture(android.graphics.Picture)">drawPicture()</a></code></li>

        <li><code><a href="../../../reference/android/graphics/Canvas.html#drawPosText(char[], int, int, float[], android.graphics.Paint)">drawPosText()</a></code></li>

        <li><code><a href="../../../reference/android/graphics/Canvas.html#drawTextOnPath(char[], int, int, android.graphics.Path, float, float, android.graphics.Paint)">drawTextOnPath()</a></code></li>

        <li><code><a href="../../../reference/android/graphics/Canvas.html#drawVertices(android.graphics.Canvas.VertexMode, int, float[], int, float[], int, int[], int, short[], int, int, android.graphics.Paint)">drawVertices()</a></code></li>
      </ul>
    </li>

    <li>
      <strong>Paint</strong>

      <ul>
        <li><code><a href="../../../reference/android/graphics/Paint.html#setLinearText(boolean)">setLinearText()</a></code></li>

        <li><code><a href="../../../reference/android/graphics/Paint.html#setMaskFilter(android.graphics.MaskFilter)">setMaskFilter()</a></code></li>

        <li><code><a href="../../../reference/android/graphics/Paint.html#setRasterizer(android.graphics.Rasterizer)">setRasterizer()</a></code></li>
      </ul>
    </li>
  </ul>

  <p>In addition, some operations behave differently with hardware acceleration enabled:</p>

  <ul>
    <li>
      <strong>Canvas</strong>

      <ul>
        <li><code><a href="../../../reference/android/graphics/Canvas.html#clipRect(android.graphics.Rect)">clipRect()</a></code>: <code>XOR</code>,
        <code>Difference</code> and <code>ReverseDifference</code> clip modes are ignored. 3D
        transforms do not apply to the clip rectangle</li>

        <li><code><a href="../../../reference/android/graphics/Canvas.html#drawBitmapMesh(android.graphics.Bitmap, int, int, float[], int, int[], int, android.graphics.Paint)">drawBitmapMesh()</a></code>: colors array is
        ignored</li>

        <li><code><a href="../../../reference/android/graphics/Canvas.html#drawLines(float[], android.graphics.Paint)">drawLines()</a></code>: anti-aliasing is not
        supported</li>

        <li><code><a href="../../../reference/android/graphics/Canvas.html#setDrawFilter(android.graphics.DrawFilter)">setDrawFilter()</a></code>: can be set, but is
        ignored</li>
      </ul>
    </li>

    <li>
      <strong>Paint</strong>

      <ul>
        <li><code><a href="../../../reference/android/graphics/Paint.html#setDither(boolean)">setDither()</a></code>: ignored</li>

        <li><code><a href="../../../reference/android/graphics/Paint.html#setFilterBitmap(boolean)">setFilterBitmap()</a></code>: filtering is always
        on</li>

        <li><code><a href="../../../reference/android/graphics/Paint.html#setShadowLayer(float, float, float, int)">setShadowLayer()</a></code>: works with text
        only</li>
      </ul>
    </li>

    <li>
      <strong>ComposeShader</strong>

      <ul>
        <li><code><a href="../../../reference/android/graphics/ComposeShader.html">ComposeShader</a></code> can only contain shaders of different types (a
        <code><a href="../../../reference/android/graphics/BitmapShader.html">BitmapShader</a></code> and a <code><a href="../../../reference/android/graphics/LinearGradient.html">LinearGradient</a></code> for
        instance, but not two instances of <code><a href="../../../reference/android/graphics/BitmapShader.html">BitmapShader</a></code> )</li>

        <li><code><a href="../../../reference/android/graphics/ComposeShader.html">ComposeShader</a></code> cannot contain a <code><a href="../../../reference/android/graphics/ComposeShader.html">ComposeShader</a></code></li>
      </ul>
    </li>
  </ul>

  <p>If your application is affected by any of these missing features or limitations, you can turn
  off hardware acceleration for just the affected portion of your application by calling
  <code><a href="../../../reference/android/view/View.html#setLayerType(int, android.graphics.Paint)">setLayerType(View.LAYER_TYPE_SOFTWARE, null)</a></code>. This way,
you can still take advantage of hardware acceleratin everywhere else. See <a
href="#controlling">Controlling Hardware Acceleration</a> for more information on how to enable and
disable hardware acceleration at different levels in your application.



  <h2 id="layers">View Layers</h2>

  <p>In all versions of Android, views have had the ability to render into off-screen buffers,
either by using a view's drawing cache, or by using <code><a href="../../../reference/android/graphics/Canvas.html#saveLayer(android.graphics.RectF, android.graphics.Paint, int)">Canvas.saveLayer()</a></code>. Off-screen buffers, or layers, have several uses. You can use them to get
  better performance when animating complex views or to apply composition effects. For instance,
  you can implement fade effects using <code>Canvas.saveLayer()</code> to temporarily render a view
  into a layer and then composite it back on screen with an opacity factor.</p>

  <p>Beginning in Android 3.0 (API level 11), you have more control on how and when to use layers
  with the <code><a href="../../../reference/android/view/View.html#setLayerType(int, android.graphics.Paint)">View.setLayerType()</a></code> method. This API takes two
  parameters: the type of layer you want to use and an optional <code><a href="../../../reference/android/graphics/Paint.html">Paint</a></code>
  object that describes how the layer should be composited. You can use the <code><a href="../../../reference/android/graphics/Paint.html">Paint</a></code> parameter to apply color filters, special blending modes, or opacity to a
  layer. A view can use one of three layer types:</p>

  <ul>
    <li><code><a href="../../../reference/android/view/View.html#LAYER_TYPE_NONE">LAYER_TYPE_NONE</a></code>: The view is rendered normally and is not backed
    by an off-screen buffer. This is the default behavior.</li>

    <li><code><a href="../../../reference/android/view/View.html#LAYER_TYPE_HARDWARE">LAYER_TYPE_HARDWARE</a></code>: The view is rendered in hardware into a
    hardware texture if the application is hardware accelerated. If the application is not hardware
    accelerated, this layer type behaves the same as <code><a href="../../../reference/android/view/View.html#LAYER_TYPE_SOFTWARE">LAYER_TYPE_SOFTWARE</a></code>.</li>

    <li><code><a href="../../../reference/android/view/View.html#LAYER_TYPE_SOFTWARE">LAYER_TYPE_SOFTWARE</a></code>: The view is rendered in software into a
    bitmap.</li>
  </ul>

  <p>The type of layer you use depends on your goal:</p>

  <ul>
    <li><strong>Performance</strong>: Use a hardware layer type to render a view into a hardware
    texture. Once a view is rendered into a layer, its drawing code does not have to be executed
    until the view calls <code><a href="../../../reference/android/view/View.html#invalidate()">invalidate()</a></code>. Some animations, such as
    alpha animations, can then be applied directly onto the layer, which is very efficient
    for the GPU to do.</li>

    <li><strong>Visual effects</strong>: Use a hardware or software layer type and a <code><a href="../../../reference/android/graphics/Paint.html">Paint</a></code> to apply special visual treatments to a view. For instance, you can
    draw a view in black and white using a <code><a href="../../../reference/android/graphics/ColorMatrixColorFilter.html">ColorMatrixColorFilter</a></code>.</li>

    <li><strong>Compatibility</strong>: Use a software layer type to force a view to be rendered in
    software. If a view that is hardware accelerated (for instance, if your whole
    application is hardware acclerated), is having rendering problems, this is an easy way to work
around limitations of the hardware rendering
    pipeline.</li>
  </ul>

  <h3 id="layers-anims">View layers and animations</h3>

  <p>Hardware layers can deliver faster and smoother animations when your application
is hardware accelerated. Running an animation at 60 frames per second is not always possible when
animating complex views that issue a lot of drawing operations. This can be alleviated by
using hardware layers to render the view to a hardware texture. The hardware texture can
then be used to animate the view, eliminating the need for the view to constantly redraw itself
when it is being animated. The view is not redrawn unless you change the view's
properties, which calls <code><a href="../../../reference/android/view/View.html#invalidate()">invalidate()</a></code>, or if you call <code><a href="../../../reference/android/view/View.html#invalidate()">invalidate()</a></code> manually. If you are running an animation in
your application and do not obtain the smooth results you want, consider enabling hardware layers on
your animated views.</p>

  <p>When a view is backed by a hardware layer, some of its properties are handled by the way the
  layer is composited on screen. Setting these properties will be efficient because they do not
  require the view to be invalidated and redrawn. The following list of properties affect the way
  the layer is composited. Calling the setter for any of these properties results in optimal
  invalidation and no redrawing of the targeted view:</p>

  <ul>
    <li><code>alpha</code>: Changes the layer's opacity</li>

    <li><code>x</code>, <code>y</code>, <code>translationX</code>, <code>translationY</code>:
Changes the layer's position</li>

    <li><code>scaleX</code>, <code>scaleY</code>: Changes the layer's size</li>

    <li><code>rotation</code>, <code>rotationX</code>, <code>rotationY</code>: Changes the
    layer's orientation in 3D space</li>

    <li><code>pivotX</code>, <code>pivotY</code>: Changes the layer's transformations origin</li>
  </ul>

  <p>These properties are the names used when animating a view with an <code><a href="../../../reference/android/animation/ObjectAnimator.html">ObjectAnimator</a></code>. If you want to access these properties, call the appropriate
  setter or getter. For instance, to modify the alpha property, call <code><a href="../../../reference/android/view/View.html#setAlpha(float)">setAlpha()</a></code>. The following code snippet shows the most efficient way
  to rotate a viewiew in 3D around the Y-axis:</p>
  <pre>
view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
ObjectAnimator.ofFloat(view, "rotationY", 180).start();
</pre>

  <p>Because hardware layers consume video memory, it is highly recommended that you enable them
only for the duration of the animation and then disable them after the animation is done. You
can accomplish this using animation listeners:</p>
  <pre>
View.setLayerType(View.LAYER_TYPE_HARDWARE, null);
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "rotationY", 180);
animator.addListener(new AnimatorListenerAdapter() {
    &#064;Override
    public void onAnimationEnd(Animator animation) {
        view.setLayerType(View.LAYER_TYPE_NONE, null);
    }
});
animator.start();
</pre>

  <p>For more information on property animation, see <a href=
  "../../../guide/topics/graphics/prop-animation.html">Property Animation</a>.</p>

 <h2 id="tips">Tips and Tricks</h2>

  <p>Switching to hardware accelerated 2D graphics can instantly increase performance, but you
  should still design your application to use the GPU effectively by following these
  recommendations:</p>

  <dl>
    <dt><strong>Reduce the number of views in your application</strong></dt>

    <dd>The more views the system has to draw, the slower it will be. This applies to the software
    rendering pipeline as well. Reducing views is one of the easiest ways to optimize your UI.</dd>

    <dt><strong>Avoid overdraw</strong></dt>

    <dd>Do not draw too many layers on top of each other. Remove any views that are completely
    obscured by other opaque views on top of it. If you need to draw several layers blended on top
    of each other, consider merging them into a single layer. A good rule of thumb with current
    hardware is to not draw more than 2.5 times the number of pixels on screen per frame
    (transparent pixels in a bitmap count!).</dd>

    <dt><strong>Don't create render objects in draw methods</strong></dt>

    <dd>A common mistake is to create a new <code><a href="../../../reference/android/graphics/Paint.html">Paint</a></code> or a new <code><a href="../../../reference/android/graphics/Path.html">Path</a></code> every time a rendering method is invoked. This forces the garbage
collector to run more often and also bypasses caches and optimizations in the hardware
pipeline.</dd>

    <dt><strong>Don't modify shapes too often</strong></dt>

    <dd>Complex shapes, paths, and circles for instance, are rendered using texture masks. Every
    time you create or modify a path, the hardware pipeline creates a new mask, which can be
    expensive.</dd>

    <dt><strong>Don't modify bitmaps too often</strong></dt>

    <dd>Every time you change the content of a bitmap, it is uploaded again as a GPU texture the
    next time you draw it.</dd>

    <dt><strong>Use alpha with care</strong></dt>

    <dd>When you make a view translucent using <code><a href="../../../reference/android/view/View.html#setAlpha(float)">setAlpha()</a></code>,
    <code><a href="../../../reference/android/view/animation/AlphaAnimation.html">AlphaAnimation</a></code>, or <code><a href="../../../reference/android/animation/ObjectAnimator.html">ObjectAnimator</a></code>, it
    is rendered in an off-screen buffer which doubles the required fill-rate. When applying alpha
    on very large views, consider setting the view's layer type to
    <code>LAYER_TYPE_HARDWARE</code>.</dd>
  </dl>

    </div>

  <a href="#top" style="float:right">&uarr; Go to top</a>
  
    <p><a href="index.html">&larr; Back to Graphics</a></p>
  
  </div>

<div id="footer">


  <div id="copyright">
    
  Except as noted, this content is licensed under <a
  href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>. 
  For details and restrictions, see the <a href="../../../license.html">
  Content License</a>.
  </div>
  <div id="build_info">
    
  Android 4.0&nbsp;r1 - 17 Oct 2011 18:17

  </div>

  <div id="footerlinks">
    
  <p>
    <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
    <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
    <a href="http://www.android.com/branding.html">Brand Guidelines</a>
  </p>
  </div>

</div> <!-- end footer -->

</div><!-- end doc-content -->

</div> <!-- end body-content --> 

<script type="text/javascript">
init(); /* initialize android-developer-docs.js */
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-5831155-1");
pageTracker._trackPageview();
</script>

</body>
</html>



